package com.tofacebook.mybatis.utils;



import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionUtils {
    //我们需要将Mapper代理实现类公共出来，别的地方就直接使用我们这个工具类
    //我要去访问类中的属性和方法  有那两种方式
    /**
     * 1.new 关键字去实例化对象，然后通过对象名.属性/方法
     * 2.类名.方法名，需要使用static去修饰这个方法
     */
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        try {
            //1.mybatis 里面的Resources这个类.getResourceAsStream()加载
            //mybatis-config.xml,加载mysql数据源环境，sql映射文件
            InputStream is  = Resources.getResourceAsStream("mybatis-config.xml");
            //2.实例化SqlSessionFactoryBuilder这个类去获取SqlSessionFactory工厂类
            SqlSessionFactoryBuilder ssb = new SqlSessionFactoryBuilder();
            //3.获取SqlSessionFactory工厂类 ,通过mbatis-config.xml配置信息去构建我们工厂类
            SqlSessionFactory sqlSessionFactory = ssb.build(is);
            //4.通过工厂类得到我们sqlSession这个代理实现类,
            //往openSesion(传递一个boolean为true一个值，让其自动提交事务)，这样的话数据就落地到表里面
            sqlSession = sqlSessionFactory.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }
}
